package uy.org.softtech.cssuite.web.modelo;

import static org.springframework.util.CollectionUtils.isEmpty;
import static org.springframework.util.StringUtils.hasText;

import java.util.Set;

import uy.org.softtech.cssuite.core.Modelo;
import uy.org.softtech.cssuite.entidad.cliente.Cliente;
import uy.org.softtech.cssuite.entidad.cliente.Empresa;
import uy.org.softtech.cssuite.entidad.cliente.Persona;
import uy.org.softtech.cssuite.entidad.finanzas.Cuenta;

public class ModeloCliente extends Modelo {
	
	//NO EDITABLES
	private Long id;
	private String tipo;
	
	//EDITABLES
	private String nombre;
	private String comentarios;
	
	//EDITABLES - PERSONA
	private String apellido;
	private String segundoNombre;
	private String correoElectronico;
	private String telefono;
	private String celular;
	
	//EDITABLES - EMPRESA
	private String razonSocial;
	private String rut;
	private String url;
	
	//LISTAS
	private Set<Cuenta> cuentas;
	
	public void inicializaModelo(Cliente cliente) {
		
		//CAMPOS COMUNES
		if (getId() == null) {
			setId(cliente.getId());
		}
		if(!hasText(getTipo())) {
			setTipo(cliente.getTipo().toString());
		}
		if(!hasText(getComentarios())) {
			setComentarios(cliente.getComentarios());
		}
				
		//CAMPOS DE PERSONA
		if(cliente instanceof Persona) {
			Persona persona = (Persona) cliente;
			
			if(!hasText(getNombre())) {
				setNombre(persona.getPrimerNombre());
			}
			if(!hasText(getApellido())) {
				setApellido(persona.getApellido());
			}		
			if(!hasText(getSegundoNombre())) {
				setSegundoNombre(persona.getSegundoNombre());
			}
			if(!hasText(getCorreoElectronico())) {
				setCorreoElectronico(persona.getCorreoElectronico());
			}
			if(!hasText(getTelefono())) {
				setTelefono(persona.getTelefono());
			}
			if(!hasText(getCelular())) {
				setCelular(persona.getCelular());
			}
		}
		
		//CAMPOS DE EMPRESA
		if(cliente instanceof Empresa) {
			Empresa empresa = (Empresa) cliente;
			
			if(!hasText(getNombre())) {
				setNombre(empresa.getNombre());
			}
			if(!hasText(getRazonSocial())) {
				setRazonSocial(empresa.getRazonSocial());
			}
			if(!hasText(getUrl())) {
				setUrl(empresa.getUrl());
			}
			if(!hasText(getRut())) {
				setRut(empresa.getRut());
			}
		}
		
		//LISTAS
		if(isEmpty(getCuentas())) {
			setCuentas(cliente.getCuentas());
		}
	}

	/*
	 *  GETTERS
	 */	
	public Long getId() {
		return id;
	}
	public String getTipo() {
		return tipo;
	}
	public String getNombre() {
		return nombre;
	}
	public String getComentarios() {
		return comentarios;
	}
	public String getApellido() {
		return apellido;
	}
	public String getSegundoNombre() {
		return segundoNombre;
	}
	public String getCorreoElectronico() {
		return correoElectronico;
	}
	public String getTelefono() {
		return telefono;
	}
	public String getCelular() {
		return celular;
	}
	public String getRazonSocial() {
		return razonSocial;
	}
	public String getRut() {
		return rut;
	}
	public String getUrl() {
		return url;
	}
	public Set<Cuenta> getCuentas() {
		return cuentas;
	}

	/*
	 *  SETTERS
	 */
	public void setId(Long id) {
		this.id = id;
	}
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public void setComentarios(String comentarios) {
		this.comentarios = comentarios;
	}
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}
	public void setSegundoNombre(String segundoNombre) {
		this.segundoNombre = segundoNombre;
	}
	public void setCorreoElectronico(String correoElectronico) {
		this.correoElectronico = correoElectronico;
	}
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}
	public void setCelular(String celular) {
		this.celular = celular;
	}
	public void setRazonSocial(String razonSocial) {
		this.razonSocial = razonSocial;
	}
	public void setRut(String rut) {
		this.rut = rut;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public void setCuentas(Set<Cuenta> cuentas) {
		this.cuentas = cuentas;
	}

	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("ModeloCliente [");
		builder.append("accion=" + getAccion().toString() + ", ");
		builder.append("id=" + getId() + ", ");
		builder.append("tipo=" + getTipo() + ", ");
		builder.append("nombre=" + getNombre() + ", ");
		builder.append("razonSocial=" + getRazonSocial() + ", ");
		builder.append("url=" + getUrl() + ", ");
		builder.append("rut=" + getRut() + ", ");
		builder.append("apellido=" + getApellido() + ", ");
		builder.append("segundoNombre=" + getSegundoNombre() + ", ");
		builder.append("correoElectronico=" + getCorreoElectronico() + ", ");
		builder.append("telefono=" + getTelefono() + ", ");
		builder.append("celular=" + getCelular() + ", ");
		if(!isEmpty(getCuentas())) {
			builder.append("cuentas" + getCuentas() + ", ");
		}
		builder.append("comentarios=" + getComentarios());
		builder.append("]");
		return builder.toString();
	}

}
